package com.gxc.string;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 给出一个仅包含字母的字符串，不包含空格，统计字符串中各个字母（区分大小写）出现的次数，
 *
 * 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。
 *
 * 如果次数相同，按照自然顺序进行排序，且小写字母在大写字母之前。
 *
 * 输入描述
 * 输入一行，为一个仅包含字母的字符串。
 *
 * 输出描述
 * 按照字母出现次数从大到小的顺序输出各个字母和字母次数，用英文分号分隔，注意末尾的分号；
 *
 * 字母和次数间用英文冒号分隔。
 */
public class SortString {

    public static void main(String[] args) {
        System.out.println((int)'z');
        System.out.println((int)'A');

        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        scanner.close();

        int[] count = new int[256];
        for (int i = 0; i < str.length(); i++) {
            count[str.charAt(i)]++;
        }

        int maxIndex = Arrays.stream(count).max().getAsInt();
        for (int i = maxIndex; i > 0; i--) {
            for (int j = 'a'; j <= 'z'; j++) {
                if (count[j] == i) {
                    System.out.print((char)j);
                    System.out.print(":");
                    System.out.print(i);
                    System.out.print(";");
                }
            }

            for (int j = 'A'; j <= 'Z'; j++) {
                if (count[j] == i) {
                    System.out.print((char)j);
                    System.out.print(":");
                    System.out.print(i);
                    System.out.print(";");
                }
            }
        }
    }
}
